/****************************************************
 * Description: Service for 用户
 * Copyright:   Copyright (c) 2013
 * Company:     beiwaionline
 * @author      bfsu
 * @version     1.0
 * @see
	HISTORY
 *  2013-08-08 bfsu Create File
 **************************************************/

package com.bfsuol.bfsuolframework.security.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.bfsuol.bfsuolframework.core.controller.support.Pagination;
import com.bfsuol.bfsuolframework.security.dao.BaseUser;
import com.bfsuol.bfsuolframework.security.dao.Group;
import com.bfsuol.bfsuolframework.security.dao.Role;
import com.bfsuol.bfsuolframework.security.entity.dto.RoleDTO;

import java.util.Collection;
import java.util.List;

public interface BaseUserService extends IService<BaseUser> {

	/**
	 * 校验邮箱的唯一性
	 * @param email
	 * @param id 创建新用户时，id设为null
	 * @return true是不唯一  false是唯一
	 */
	public Boolean checkEmail(String email, Long id);
	
	/**
	 * 校验用户名的唯一性
	 * @param id 创建新用户时，id设为null
	 * @return true是不唯一  false是唯一
	 */
	public Boolean checkLoginName(String loginName, Long id);

	/**
	 * 根据用户组ID查询属于（或不属于）该用户组的所有用户（查询条件：名字模糊查询，登录名精确查询，Email模糊查询）（带分页）
	 * @param name
	 * @param loginName
	 * @param email
	 * @param groupId
	 * @param page
	 * @return
	 */
	public Pagination findUserByGroup(String name, String loginName,
                                      String email, Long groupId, Pagination page, boolean isBelong);


	/**
	 * 执行增加或删除组操作
	 *
	 * @param userId 用户ID
	 * @param roleOld 修改前，已勾选的角色集合
	 * @param roleDTOList 修改后，拥有的全部角色DTO集合
	 * @return 结果
	 */
	public String addOrDelGroup(Long userId, Collection<Role> roleOld,
                                List<RoleDTO> roleDTOList);
	
	
	/**
	 * 获取指定账户，可选择的角色列表
	 * @param userId
	 * @return
	 */
	public List<RoleDTO> canChooseRoleList(Long userId, Collection<Group> groups);
	/**
	 * 根据loginName获取user 角色数组
	 */
	public String[] getUserByLoginName(String loginName);
	/**
	 * 修改禁用状态
	 */
	public void changeStatus(Long id, Integer status);
	
	/**
	 * 重置密码
	 * @param id
	 */
	public void resetPwd(Long id);
	/**
	 * 用户注册
	 * 
	 */
	public boolean registUser(BaseUser bu);
}
